#ifndef NETCONTROLWIDGET_H
#define NETCONTROLWIDGET_H

#include "common/defenderprocinfolist.h"
#include "widgets/defendertable.h"
#include "widgets/hswitchbutton.h"
//#include <DTipLabel>
//#include <DSwitchButton>

#include <QMap>
#include <QPushButton>
#include <QLabel>
#include <QItemDelegate>
#include <QComboBox>

using namespace def::widgets;

class HFrame1;
class DTipLabel;
class DBusInvokerInterface;
class SettingsInvokerInterface;
class TipWidget;
class NetControlWidget;
class NetCtrlModel;

class NetTableViewItemDelegate : public QItemDelegate
{
public:
    NetTableViewItemDelegate(NetControlWidget *widget, QObject *parent = nullptr);

    void paint(QPainter *painter,
               const QStyleOptionViewItem &option,
               const QModelIndex &index) const;

private:
    NetControlWidget *m_widget;
};

class NetControlWidget : public QFrame
{
    Q_OBJECT
public:
    explicit NetControlWidget(NetCtrlModel *model, const QString &sPkgName, QWidget *parent = nullptr);
    ~NetControlWidget();

    // 提供接口获取图片
    QPixmap getPixmap(const QString &appIcon, const QSize &size);

    // 设置表格选中行
    void setNetControlIndex(const QString &sPkgName);

private:
    // 初始化界面
    void initUi();

    // 初始化数据
    void initData();

    // 初始化判断是否显示联网管控开关未开启提示
    void intiSwitchStatus();

private Q_SLOTS:
    // 接收所有APPS的详细信息
    void doNetAppsInfo(const DefenderProcInfoList&);

    // 表格内下拉框选项改变
    void onAppOptChanged(int index);

    //切换按钮开关状态
    void slotChangeControlStatus(bool isChecked);

private:
    NetCtrlModel *m_model;
    QTableView *m_tableView; // 表格
    QStandardItemModel *m_tableModel; // 模型
    bool m_bIniFlag; // 排序初始化标志
    NetTableViewItemDelegate *m_tableDelegate; // 表格代理
    QMap<QComboBox *, QString> m_comboToAppName; // 联网管控表格下拉框容器
    QMap<QString, QString> m_appNamefromPkgName;
    QString m_sDefaultStatus; // 联网管控默认状态
    QString m_sLocatPkgName; // 用来定位的包名

    DefenderTable *m_netTableWidget;
    QLabel *m_lbTotal;
    HSwitchButton *m_netSwitchButton;
    SettingsInvokerInterface *m_gsetting; // 安全中心gsetting配置
    DBusInvokerInterface *m_dataInterFaceServer; // 安全中心数据服务接口
    DBusInvokerInterface *m_monitorInterFaceServer; // 监控dbus类
};


#endif // NETCONTROLWIDGET_H
